// Copyright 2011 George Cook
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


#import "InjectiveDictionaryPropertyValueXMLFactory.h"
#import "InjectiveDictionaryPropertyValueDescription.h"
#import "InjectiveContextXMLFactory.h"
#import "TBXML.h"

@implementation InjectiveDictionaryPropertyValueXMLFactory

#pragma mark -
#pragma mark InjectivePropertyValueXMLFactory implementation

//TODO add more error reporting for screwed up data (e.g. missing names, values)
- (InjectivePropertyValueDescription *)valueDescriptionForPropertyElement: (TBXMLElement *) propertyElement
														  usingXMLFactory:(InjectiveContextXMLFactory *)factory
																 withType:(NSString *)type;
{
	InjectiveDictionaryPropertyValueDescription *dictionaryDescription = [[InjectiveDictionaryPropertyValueDescription alloc] init];
	dictionaryDescription.valueDescriptionsByName = [NSMutableDictionary dictionaryWithCapacity:3];
	dictionaryDescription.type = @"Dictionary";
	TBXMLElement *objectElement = [TBXML childElementNamed:@"values" parentElement:propertyElement];
	if (nil == objectElement ) {
		return dictionaryDescription;
	}
	
	TBXMLElement *valueElement = [TBXML childElementNamed:@"value" parentElement:objectElement];
	while (valueElement != nil) {
		InjectivePropertyDescription *dictionaryValue = [factory createPropertyDescriptionForPropertyElement:valueElement];
		[((NSMutableDictionary *)dictionaryDescription.valueDescriptionsByName)setObject:dictionaryValue forKey:dictionaryValue.propertyName];
		valueElement = [TBXML nextSiblingNamed:@"value" searchFromElement:valueElement];
	}
	return [dictionaryDescription autorelease];
}

@end
